package edu.fasta.sisinfo2.net;


import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ConnectException;
import java.net.Socket;

import javax.swing.JOptionPane;



public class Cliente{    

	private Socket socketCliente;
	private ObjectOutputStream salida;
	private ObjectInputStream entrada;   
	private String ip;
	private int port;

	public Cliente( String ipadress , int port ){ 

		this.ip = ipadress;
		this.port = port;
		   
	}

	public boolean iniciar() throws IOException {

		try {
			return conectarAServidor();
			
		} catch (EOFException exEOF) {
			System.err.println("El cliente termino la conexion");
			cerrarConexion();
		}
		catch (IOException excepcionES) {
			System.out.println("error de entrada/ salida :");
			excepcionES.printStackTrace();
		}

		finally{
			//cerrarConexion();
		}
		return false;
	}

	public boolean conectarAServidor() throws IOException {
		System.out.println("Intentando realizar conexion\n");

		// crear Socket para realizar la conexion con el servidor
		try{
			socketCliente = new Socket(ip,port); // ip , puerto
			System.out.println("Conectado a: " + socketCliente.getInetAddress().getHostName());
			return true;
		}catch(ConnectException e){
			System.out.println("Error de de Conexion..");
			return false;
		}
		
	
	}
	public void desconectarDeServidor() throws IOException{
		socketCliente.close();
	}

	
	public InterfazComandoServer recibirDatos() {
		InterfazComandoServer unComando=null;
		// establecer flujo de entrada para los objetos
		
			try {
				entrada = new ObjectInputStream(socketCliente.getInputStream());
				try {
					unComando= (InterfazComandoServer)entrada.readObject();
				} catch (ClassNotFoundException e) {
					JOptionPane.showMessageDialog(null,"error en la conexion! - Time Out");
					System.exit(0);
					//e.printStackTrace();
				}
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null,"error en la conexion! - Time Out");
				System.exit(0);
			}
		
			
		
		
		return unComando;
		//System.out.println("\nSe recibieron los flujos de E/S\n");
	}
	

	public void cerrarConexion() {    
		System.out.println("\nSe cerro la conexion");
		try {
			salida.close();
			entrada.close();
			socketCliente.close();
		} catch (IOException exES) {
			exES.printStackTrace();
		}        
	}

	public void enviarDatos(InterfazComandoJugador mensaje) {
		try {
			salida = new ObjectOutputStream(socketCliente.getOutputStream());
			salida.writeObject( mensaje );
			salida.flush();
			System.out.println("\n ENVIANDO:" + mensaje.getClass().getName() );
		} catch (IOException exES) {
			System.out.println("\nError al escribir el objeto"+ exES);
		}
	}


	public String getHost() {
		return ip;
	}

	public void setHost(String host) {
		this.ip = host;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}

	public Socket getSocketCliente() {
		return socketCliente;
	}

	public void setSocketCliente(Socket socketCliente) {
		this.socketCliente = socketCliente;
	}

}